/*
 * 公用变量，方法库
 */

//var baseURL = 'http://192.168.2.101:8080/xunyanhui/';
//var baseURL = 'http://192.168.2.136:8080/xunyanhui/';
//var baseURL = 'http://192.168.2.240:8089/xunyanhui/';
//var baseURL = 'https://192.168.2.240:8443/xunyanhui/';
//var baseURL = 'http://www.luquxian.net/xunyanhui/';
var baseURL = 'http://172.20.11.39:8080/xunyanhui/';
//var baseURL = 'http://yu9reu.natappfree.cc/xunyanhui/';

/**
 * 全局公用对象
 */
var Common = {};

/**
 *  使用XMLHttpRequest对象简单封装ajax，支持GET与POST
 *  支持超时自动登录，自动登录失败后同样通过失败回调返回
 * @param {Object} option       请求选项 包括url,方法等
 * @param {Object} successCB    成功回调
 * @param {Object} failCB       失败回调
 */
Common.ajax = function(option, successCB, failCB) {
    var lastTime = Number(plus.storage.getItem('reqTime'));
    var now = new Date().getTime();
    if(User.islogin()) { // 未登录，无需自动登录
        if(lastTime) { // 第一次请求，无需自动登录
            var delay = ((now - Number(lastTime)) / 1000);
            console.error('上次请求在 ' + delay.toFixed(0) + ' 秒前');
            if(delay > 120) {
                console.error('超时准备重新登录');
                Common.autologin(function(xhr) {
                	console.error('自动登录返回信息：' + xhr.status + ' : ' + xhr.statusText);
                	if(xhr) {
	                	mui.toast('网络异常，请稍后再试');
	                    console.error('自动登录失败');
	                    failCB(xhr);
	                }
                })
            }
        } else {
        	console.error('未请求成功过');
        }
    }
    var type = option.type ? option.type : 'GET';
    var postData = type.toUpperCase() == 'POST' ? option.data : null;
    var contentType = option.contentType ? option.contentType : 'application/x-www-form-urlencoded; charset=utf-8';
    var xhr = new plus.net.XMLHttpRequest();
    xhr.open(type, option.url);
    xhr.setRequestHeader('Content-type', contentType);
    xhr.timeout = 5000;
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status == 200) {
                plus.storage.setItem('reqTime', String(now));
                var data;
                try {
                    data = eval('(' + xhr.responseText + ')');
                    successCB(data);
                } catch(e) {
                    successCB(xhr.responseText);
                }
            } else {
                failCB(xhr);
            }
        }
    }
    xhr.send(postData);
}

/**
 * 超时重新登录
 * @param {Object} failCB	重新登录失败回调
 */
Common.autologin = function(failCB){
	console.error('开始自动登录');
    var url1 = baseURL + 'user/logout.json';
    var xhr1 = new plus.net.XMLHttpRequest();
    xhr1.timeout = 5000;
    xhr1.onreadystatechange = function() {
        if(xhr1.readyState == 4) {
            if(xhr1.status == 200) {
                console.error('已退出');
                var lastAccount = plus.storage.getItem('account');
                lastAccount = JSON.parse(lastAccount);
                var xhr2 = new plus.net.XMLHttpRequest();
                xhr2.timeout = 5000;
                xhr2.onreadystatechange = function() {
                    if(xhr2.readyState == 4) {
                        if(xhr2.status == 200) {
                            var url3 = baseURL + 'user/login.json?userName=';
                            url3 += lastAccount.account + '&password=';
                            url3 += lastAccount.password;
                            var xhr3 = new plus.net.XMLHttpRequest();
                            xhr3.timeout = 5000;
                            xhr3.onreadystatechange = function() {
                                if(xhr3.readyState == 4) {
                                    if(xhr3.status == 200) {
                                        console.error('已重新登录');
                                    } else {
                                        console.error('failed - ' + xhr3.status + ' : ' + xhr3.statusText);
                                        failCB(xhr3);
                                    }
                                }
                            }
                            xhr3.open('GET', url3);
                            xhr3.send();
                        } else {
                            console.error('failed - ' + xhr2.status + ' : ' + xhr2.statusText);
                            failCB(xhr2);
                        }
                    }
                }
                xhr2.open('GET', baseURL + 'user/sid.json');
                xhr2.send();
            } else {
                console.error('failed - ' + xhr1.status + ' : ' + xhr1.statusText);
                failCB(xhr1);
            }
        }
    }
    xhr1.open('GET', url1);
    xhr1.send();
}


/**
 * 打开新窗口
 * @param {Object} url          新窗口url
 * @param {Object} option       向新窗口传递的数据
 */
Common.openWindow = function(url, option) {
    option = option || {};
    mui.openWindow({
        url: url,
        extras: option,
        waiting: {
            autoShow: false //自动显示等待框，默认为true
        },
        show: {
            aniShow: 'pop-in', //页面显示动画，默认为”slide-in-right“；
            duration: 200 //页面动画持续时间，Android平台默认100毫秒，iOS平台默认200毫秒；
        }
    });
}

/**
 * 在原有位置显示图标及提示信息
 * @param {Object} node     	待替换节点
 * @param {Object} code         字体图标代码
 * @param {Object} text         显示文字
 * @param {Object} offset       相对父元素的上下偏移量
 */
Common.showState = function(node, code, text, offset) {
    var stateElem = document.createElement('div');
    stateElem.className = 'icon-state';
    stateElem.style.marginTop = ((typeof offset == 'number') ? offset : 20) + '%';
    stateElem.id = 'iconStateArea';
    var str = '';
    if(code) {
        str += '<i class="iconfont">'+ code +'</i>';
    }
    str += '<p>'+ text +'</p>';
    stateElem.innerHTML = str;
    node.style.display = 'none';
    node.parentNode.appendChild(stateElem);
    return stateElem;
}

/**
 * 由于网络异常导致数据加载失败，页面上需包含.mui-content节点
 */
Common.linkError = function() {
	var str = '<header class="mui-bar mui-bar-nav"><a class="mui-action-back mui-icon mui-icon-back mui-icon-left-nav mui-pull-left">';
	str += '</a></header><div id="content"></div>';
	document.body.innerHTML = str;
	document.body.style.overflow = 'hidden';
	Common.showState(document.getElementById("content"), '&#xe60b;', '网络异常，请稍后重试', 50);
}

/**
 * 根据逆地理编码结果获取城
 * @param {Object} address      逆地理编码结果
 * @param {Object} successCB    成功回调
 * @param {Object} failCB       失败回调
 */
Common.getCity = function(address, successCB, failCB) {
    var url = baseURL + 'city/getCityName/' + address + '.json';
    console.log(url);
    Common.ajax({
        url : url,
        type : 'GET'
    }, function(data) {
        console.log(JSON.stringify(data));
        if(data.code == 1) {
            successCB(data.cityList[0]);
        } else {
            failCB(data);
        }
    }, function(xhr) {
        failCB(xhr);
        mui.toast('网络异常，请稍后再试');
        console.error('failed - ' + xhr.status + ' : ' + xhr.statusText);
    })
}

/**
 * 将数据转换为url地址
 * @param {Object} data 传送的数据
 */
Common.toURL = function(data) {
    var url = '?';
    for(var prop in data) {
        url += prop + '=' + data[prop] + '&';
    }
    return url;
}

/**
 * 将字节转换为合适的单位
 * @param {Object} bytes 字节数
 */
Common.bytesToSize = function(bytes) {
	if (bytes === 0) return '0 B';
    var k = 1024,
        sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
        i = Math.floor(Math.log(bytes) / Math.log(k));
   	return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
}

/**
 * 获取通用设置项
 */
Common.getUniSetting = function() {
	return JSON.parse(plus.storage.getItem('uniSetting'));
}

// 艺人类型
Common.artistType = ['搬家', '保姆', '维修', '摄影', '婚庆', '送餐', '服务员', '会场布置', '司仪驻唱', '礼仪模特',
    '传单派发', '游戏代练', '代驾', '代购','同城跑腿' ,'更多帮办'
];

// 演艺类型
Common.artshowType = ['搬家', '保姆', '维修', '摄影', '婚庆', '送餐', '服务员', '会场布置', '司仪驻唱', '礼仪模特',
    '传单派发', '游戏代练', '代驾', '代购','同城跑腿', '更多帮办'
];

// 筛选艺人项
Common.defaultArtistFilter = {
    type: 0,
    order: 0,
    gender: 0
};

// 筛选演艺项
Common.defaultArtshowFilter = {
    type: 0,
    order: 　0
};

// 艺人、演艺图片默认地址
Common.artistPic = baseURL + 'static/artist/';
Common.artshowPic = baseURL + 'static/performance/';

// 演艺审核状态
Common.auditState = ['审核中', '审核通过', '申诉处理中', '申诉终止'];

// 交易状态
Common.dealState = ['待成交', '待执行', '待支付', '待评价', '已取消', '申诉处理中', '评价完成' , '评价完成' ,'已邀请'];

// 优酷视频播放器client_id
Common.playerClient_id = 'd4145a875d32d5b5';

// 全局设置
Common.uniSetting = {
	dataAutoPlay : false,
	autoUpdate : true
}
